
Пример README для использования библиотеки GigaChat в другом проекте.

GigaChat API Client
Этот проект предоставляет клиента для взаимодействия с GigaChat API. Он включает в себя функциональность для получения токена, отправки запросов в чат и проверки pull request'ов (PR).

Установка
Склонируйте репозиторий:


git clone <URL  репозитория>
cd <имя  репозитория>
Установите зависимости:


go mod tidy
Создайте файл .env на основе .env.example и заполните его необходимыми значениями:

cp .env.example .env
Пример .env файла:

CLIENT_ID=ваш_client_id
AUTHORIZE_DATA=ваш_authorize_data
MODEL_GIGACHAT=GigaChat
SYSTEM_ROLE_GIGACHAT=Ты являешься помощником ит-специалиста, который проверяет pull request'ы. Предоставь отзыв на следующий PR
GET_TOKEN_URL=https://ngw.devices.sberbank.ru:9443/api/v2/oauth
UPDATE_PERIOD_TOKEN="25m"
BASE_URL=https://gigachat.devices.sberbank.ru/api
SCOPE=GIGACHAT_API_PERS
STREAM=true
Использование
Инициализация клиента
В вашем проекте импортируйте необходимые пакеты и инициализируйте клиента GigaChat.

Пример файла main.go:


package main

import (
    "fmt"
    "log"
    "os"

    "github.com/joho/godotenv"
    "gitverse.ru/sc/EYMikhievich/api-gigachat/internal/modules/clientGigaChat/config"
    "gitverse.ru/sc/EYMikhievich/api-gigachat/internal/modules/clientGigaChat/interfaces/api"
    "gitverse.ru/sc/EYMikhievich/api-gigachat/internal/modules/clientGigaChat/interfaces/api/token"
    "gitverse.ru/sc/EYMikhievich/api-gigachat/internal/modules/clientGigaChat/usecases"
)

func main() {
    err := godotenv.Load()
    if err != nil {
        log.Fatal("Error loading .env file")
    }

    cfg := config.ConfigAPIGigachat{
        URLReceiveToken:    os.Getenv("GET_TOKEN_URL"),
        AuthorizeData:      os.Getenv("AUTHORIZE_DATA"),
        Scope:              os.Getenv("SCOPE"),
        BaseUrl:            os.Getenv("BASE_URL"),
        UpdatePeriodToken:  os.Getenv("UPDATE_PERIOD_TOKEN"),
        ClientID:           os.Getenv("CLIENT_ID"),
        SystemRoleGigachat: os.Getenv("SYSTEM_ROLE_GIGACHAT"),
        ModelGigachat:      os.Getenv("MODEL_GIGACHAT"),
        Stream:             os.Getenv("STREAM") == "true",
    }

    // Создаем и запускаем обновление токена
    tokenUpdater, err := token.NewTokenUpdater(cfg)
    if err != nil {
        log.Fatalf("Ошибка инициализации обновления токена: %v", err)
    }
    if err := tokenUpdater.UpdateToken(); err != nil {
        log.Fatalf("Ошибка обновления токена: %v", err)
    }
    tokenUpdater.Start()

    // Создаем клиента GigaChat
    client := api.NewGigaChatClient(tokenUpdater.Token, cfg.BaseUrl)

    // Создаем PRChecker
    prChecker := usecases.NewPRChecker(client, cfg.ModelGigachat, cfg.SystemRoleGigachat, cfg.Stream)

    // Использование PRChecker
    prDescription := "go func main(){fmt.Println(test)}"
    stream := make(chan string)
    go func() {
        err = prChecker.CheckPR(prDescription, stream)
        if err != nil {
            log.Fatalf("Ошибка проверки PR: %v", err)
        }
    }()

    // Чтение данных из канала stream и вывод их в консоль
    go func() {
        for msg := range stream {
            fmt.Println("Stream message:", msg)
        }
    }()

    select {}
}

Использование PRChecker
Для использования PRChecker в другом проекте вы можете создать экземпляр PRChecker и использовать его метод CheckPR для проверки PR.

// Пример использования PRChecker в вашем проекте
prDescription := "Описание вашего PR"
stream := make(chan string)

go func() {
    err = prChecker.CheckPR(prDescription, stream)
    if err != nil {
        log.Fatalf("Ошибка проверки PR: %v", err)
    }
}()

// Чтение данных из канала stream и вывод их в консоль
go func() {
    for msg := range stream {
        fmt.Println("Stream message:", msg)
    }
}()

select {}
